{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第五部、调整树的参数：subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1、导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "train=pd.read_csv(dpath+'RentListingInquries_FE_train.csv')\n",
    "test=pd.read_csv(dpath+'RentListingInquries_FE_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop(['interest_level'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2、设置subsample和colsample_bytree的范围"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test5_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3、输入参数进行训练，得到subsample和colsample_bytree的最佳参数分别为0.8和0.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59017, std: 0.00373, params: {'subsample': 0.3, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58785, std: 0.00399, params: {'subsample': 0.4, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58639, std: 0.00301, params: {'subsample': 0.5, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58574, std: 0.00326, params: {'subsample': 0.6, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58558, std: 0.00323, params: {'subsample': 0.7, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58481, std: 0.00278, params: {'subsample': 0.8, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58911, std: 0.00396, params: {'subsample': 0.3, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58772, std: 0.00400, params: {'subsample': 0.4, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58590, std: 0.00399, params: {'subsample': 0.5, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58557, std: 0.00404, params: {'subsample': 0.6, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58492, std: 0.00388, params: {'subsample': 0.7, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58473, std: 0.00406, params: {'subsample': 0.8, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58874, std: 0.00413, params: {'subsample': 0.3, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58771, std: 0.00465, params: {'subsample': 0.4, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58699, std: 0.00408, params: {'subsample': 0.5, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58574, std: 0.00365, params: {'subsample': 0.6, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58515, std: 0.00361, params: {'subsample': 0.7, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58443, std: 0.00338, params: {'subsample': 0.8, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58787, std: 0.00444, params: {'subsample': 0.3, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58723, std: 0.00390, params: {'subsample': 0.4, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58552, std: 0.00344, params: {'subsample': 0.5, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58487, std: 0.00399, params: {'subsample': 0.6, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58401, std: 0.00377, params: {'subsample': 0.7, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58395, std: 0.00387, params: {'subsample': 0.8, 'colsample_bytree': 0.9}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.5839484573688255)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.583948 using {'subsample': 0.8, 'colsample_bytree': 0.9}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\Administrator\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x120e68d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
